import os  # 导入系统功能模块OS

import pandas as pd
# pip install python-pptx
# from pptx import Presentation # 导入演示文稿模块
# pip install pywin32
from win32com.client import DispatchEx


def PowerPoint(data):
    '''批量生成PowerPoint演示文稿中的幻灯片'''
    ppt = os.getcwd() + r"\data\2020级python项目展示.pptx"  # 片头文件
    print(ppt)
    # prs = Presentation(ppt)
    App = DispatchEx("PowerPoint.Application")  # 使用独立进程来创建PowerPoint应用程序
    App.Visible = True  # 显示PowerPoint窗口
    prs = App.Presentations.Open(ppt)  # 打开片头文件
    # 要显示的内容列表
    itemlen = len(data)  # 答辩项目数
    offset = 2  # 设置新添加幻灯片的起始页，值为：模版的片头幻灯片个数+1
    # 复制和展示项数目相同的幻灯片（由于要保留格式，所以此处只能通过合并PPT的方式实现）
    for n in range(offset, itemlen + offset):
        # 将page.pptx中的幻灯片插入到当前PPT文件中
        # https://learn.microsoft.com/zh-tw/office/vba/api/powerpoint.slides.insertfromfile
        prs.Slides.InsertFromFile(os.path.join(os.getcwd() + r"\data\page.pptx"), prs.Slides.Count, 1, 1)
    for i in range(offset, itemlen + offset):  # 循环修改每页幻灯片中的项目名称和展示者
        item = data[i - 2]
        print(item)
        # 修改第一个文本框的内容
        prs.Slides(i).Shapes(2).TextFrame.TextRange.Text = item[1]
        # 修改第二个文本框的内容
        prs.Slides(i).Shapes(3).TextFrame.TextRange.Text = "展示者： " + item[0]
    outfile = os.path.join(os.getcwd() + r"\data\项目汇报分页PPT.pptx")  # 目标文件
    prs.SaveAs(outfile)  # 另存为新的PowerPoint演示文稿
    # App.Quit()  # 退出PowerPoint应用程序
    print("PPT文件已生成！文件位置为：", outfile)


if __name__ == "__main__":
    excelFile = os.getcwd() + r'\data\2017届毕业设计第一次答辩安排.xlsx'
    # 使用pandas中read_excel(), DataFrame数据类型
    students = pd.read_excel(excelFile, sheet_name='java', skiprows=2)
    students = students[['姓名', '毕业设计选题名称']]
    print(students)
    data = []
    for tup in zip(students['姓名'], students['毕业设计选题名称']):
        data.append(tup)
    PowerPoint(data)  # 调用函数开始生成